﻿using Microsoft.CodeAnalysis;
using Sys.Workflow.Bpmn.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sys.Workflow.Engine.impl.runtime
{
    /* Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

    /**
     * @author Tijs Rademakers
     */
    public class MoveExecutionIdContainer
    {

        protected List<string> executionIds;
        protected List<string> moveToActivityIds;
        protected string newAssigneeId;
        protected string newOwnerId;

        public MoveExecutionIdContainer(string singleExecutionId, string moveToActivityId)
        {
            this.executionIds = new List<string>() { singleExecutionId };
            this.moveToActivityIds = new List<string>() { moveToActivityId };
            this.newAssigneeId = null;
            this.newOwnerId = null;
        }

        public MoveExecutionIdContainer(string singleExecutionId, string moveToActivityId, string newAssigneeId, string newOwnerId)
        {
            this.executionIds = new List<string>() { singleExecutionId };
            this.moveToActivityIds = new List<string>() { moveToActivityId };
            this.newAssigneeId = newAssigneeId;
            this.newOwnerId = newOwnerId;
        }

        public MoveExecutionIdContainer(List<string> executionIds, string moveToActivityId)
        {
            this.executionIds = executionIds;
            this.moveToActivityIds = new List<string>() { moveToActivityId };
            this.newAssigneeId = null;
            this.newOwnerId = null;

        }

        public MoveExecutionIdContainer(List<string> executionIds, string moveToActivityId, string newAssigneeId, string newOwnerId)
        {
            this.executionIds = executionIds;
            this.moveToActivityIds = new List<string>() { moveToActivityId };
            this.newAssigneeId = newAssigneeId;
            this.newOwnerId = newOwnerId;
        }

        public MoveExecutionIdContainer(string singleExecutionId, List<string> moveToActivityIds)
        {
            this.executionIds = new List<string>() { singleExecutionId };
            this.moveToActivityIds = moveToActivityIds;
            this.newAssigneeId = null;
            this.newOwnerId = null;
        }

        public MoveExecutionIdContainer(string singleExecutionId, List<string> moveToActivityIds, string newAssigneeId, string newOwnerId)
        {
            this.executionIds = new List<string>() { singleExecutionId };
            this.moveToActivityIds = moveToActivityIds;
            this.newAssigneeId = newAssigneeId;
            this.newOwnerId = newOwnerId;
        }

        public List<string> GetExecutionIds()
        {
            return executionIds ?? new List<string>();
        }

        public List<string> GetMoveToActivityIds()
        {
            return moveToActivityIds ?? new List<string>();
        }

        public string GetNewAssigneeId()
        {
            return newAssigneeId;
        }

        public string GetNewOwnerId()
        {
            return newOwnerId;
        }
    }
}
